/**
 * AI策略模块
 * 定义不同的AI决策策略
 */

// AI策略函数
export const aiStrategies = {
    // 好人AI - 返还50%
    good: (amount) => Math.round(amount * 0.5),
    
    // 坏人AI - 返还0%
    bad: () => 0,
    
    // 公平AI - 返还33%
    fair: (amount) => Math.round(amount / 3),
    
    // 心理战AI - 根据历史投资额动态调整返还比例
    psychological: (amount, history) => {
        // 默认返还率 30%
        let returnRate = 0.3;
        
        // 如果有历史记录
        if (history && history.length > 0) {
            const lastRound = history[history.length - 1];
            const prevRound = history.length > 1 ? history[history.length - 2] : null;
            
            // 如果玩家增加投资，给予奖励（提高返还率）
            if (prevRound && lastRound.investment > prevRound.investment) {
                returnRate += 0.2; // 增加到50%
            }
            
            // 随机欺骗（10%几率返还很少）
            if (Math.random() < 0.1) {
                returnRate = 0.1; // 突然降低到10%
            }
            
            // 如果玩家投资大，偶尔给予额外奖励
            if (lastRound.investment >= 8 && Math.random() < 0.3) {
                returnRate = 0.7; // 增加到70%
            }
        }
        
        return Math.round(amount * returnRate);
    },
    
    // 报复性AI - 记住玩家行为，对低投资进行惩罚
    vengeful: (amount, history) => {
        // 默认返还率 40%
        let returnRate = 0.4;
        
        // 如果有足够的历史记录
        if (history && history.length >= 3) {
            // 计算平均投资比例（投资/可投资的最大值）
            let totalRatio = 0;
            const recentRounds = history.slice(-3); // 最近3轮
            
            recentRounds.forEach(round => {
                // 假设玩家每轮有10个金币可投资
                const ratio = round.investment / 10;
                totalRatio += ratio;
            });
            
            const avgRatio = totalRatio / recentRounds.length;
            
            // 根据平均投资比例调整返还率
            if (avgRatio < 0.3) {
                // 低投资惩罚
                returnRate = 0.2;
            } else if (avgRatio > 0.7) {
                // 高投资奖励
                returnRate = 0.6;
            }
        }
        
        return Math.round(amount * returnRate);
    }
};

/**
 * 获取策略名称
 * @param {String} strategy 策略ID
 * @returns {String} 策略名称
 */
export function getStrategyName(strategy) {
    const strategyNames = {
        'good': '好人AI',
        'bad': '坏人AI',
        'fair': '公平AI',
        'psychological': '心理战AI',
        'vengeful': '报复性AI'
    };
    return strategyNames[strategy] || strategy;
}

/**
 * 判断是否欺骗回合（心理战AI + 返还率低）
 * @param {Object} record 回合记录
 * @returns {Boolean} 是否欺骗回合
 */
export function isDeceptionRound(record) {
    return record.strategy === 'psychological' && 
           parseFloat(record.returnRate) <= 0.15;
}
